package com.example.smartwaterapi.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 月度统计实体类
 */
@Data
@TableName(value = "monthly_stats", autoResultMap = true)
public class MonthlyStats implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 年份
     */
    private Integer year;

    /**
     * 月份(1-12)
     */
    private Integer month;

    /**
     * 月度总饮水量(ml)
     */
    private Integer totalAmount;

    /**
     * 日均饮水量(ml)
     */
    private Integer avgDailyAmount;

    /**
     * 达标天数
     */
    private Integer goalAchievementDays;

    /**
     * 统计天数
     */
    private Integer totalDays;

    /**
     * 月度达标率(%)
     */
    private BigDecimal achievementRate;

    /**
     * 最佳饮水日
     */
    private LocalDate bestDay;

    /**
     * 最佳日饮水量
     */
    private Integer bestDayAmount;

    /**
     * 最差饮水日
     */
    private LocalDate worstDay;

    /**
     * 最差日饮水量
     */
    private Integer worstDayAmount;

    /**
     * 最活跃时段
     */
    private Integer mostActiveHour;

    /**
     * 偏好饮品类型
     */
    private String favoriteDrinkType;

    /**
     * 平均饮水频率(次/天)
     */
    private BigDecimal avgDrinkingFrequency;

    /**
     * 整体健康评分(0-100)
     */
    private Integer overallHealthScore;

    /**
     * 一致性评分(0-100)
     */
    private Integer consistencyScore;

    /**
     * 改善趋势 1:上升 0:平稳 -1:下降
     */
    private Integer improvementTrend;

    /**
     * 与上月对比数据
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private Object vsPreviousMonth;

    /**
     * 周趋势数据
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private Object weeklyTrends;

    /**
     * 创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;
} 